home *** CD-ROM | disk | FTP | other *** search
/ Clickx 115 / Clickx 115.iso / software / tools / windows / tails-i386-0.16.iso / live / filesystem.squashfs / usr / bin / xzgrep < prev    next >
Encoding:
Text File  |  2010-11-11  |  5.1 KB  |  197 lines

  1. #!/bin/bash
  2.  
  3. # xzgrep -- a wrapper around a grep program that decompresses files as needed
  4. # Adapted from a version sent by Charles Levert <charles@comm.polymtl.ca>
  5.  
  6. # Copyright (C) 1998, 2001, 2002, 2006, 2007 Free Software Foundation
  7. # Copyright (C) 1993 Jean-loup Gailly
  8.  
  9. # Modified for XZ Utils by Andrew Dudman and Lasse Collin.
  10.  
  11. # This program is free software; you can redistribute it and/or modify
  12. # it under the terms of the GNU General Public License as published by
  13. # the Free Software Foundation; either version 2 of the License, or
  14. # (at your option) any later version.
  15.  
  16. # This program is distributed in the hope that it will be useful,
  17. # but WITHOUT ANY WARRANTY; without even the implied warranty of
  18. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  19. # GNU General Public License for more details.
  20.  
  21. #SET_PATH - This line is a placeholder to ease patching this script.
  22.  
  23. # Instead of unsetting XZ_OPT, just make sure that xz will use file format
  24. # autodetection. This way memory usage limit and thread limit can be
  25. # specified via XZ_OPT. With gzip and bzip2 it's OK to just unset the
  26. # environment variables.
  27. xz='xz --format=auto'
  28. unset GZIP BZIP BZIP2
  29.  
  30. case ${0##/*} in
  31.   *egrep*) prog=xzegrep; grep=${GREP:-egrep};;
  32.   *fgrep*) prog=xzfgrep; grep=${GREP:-fgrep};;
  33.   *)       prog=xzgrep; grep=${GREP:-grep};;
  34. esac
  35.  
  36. version="$prog (XZ Utils) 5.0.0"
  37.  
  38. usage="Usage: ${0##/*} [OPTION]... [-e] PATTERN [FILE]...
  39. Look for instances of PATTERN in the input FILEs, using their
  40. uncompressed contents if they are compressed.
  41.  
  42. OPTIONs are the same as for '$grep'.
  43.  
  44. Report bugs to <lasse.collin@tukaani.org>."
  45.  
  46. # sed script to escape all ' for the shell, and then (to handle trailing
  47. # newlines correctly) turn trailing X on last line into '.
  48. escape='
  49.   s/'\''/'\''\\'\'''\''/g
  50.   $s/X$/'\''/
  51. '
  52. operands=
  53. have_pat=0
  54. files_with_matches=0
  55. files_without_matches=0
  56. no_filename=0
  57. with_filename=0
  58.  
  59. while test $# -ne 0; do
  60.   option=$1
  61.   shift
  62.   optarg=
  63.  
  64.   case $option in
  65.   (-[0123456789abcdhHiIKLlnoqrRsTuUvVwxyzZ]?*)
  66.     arg2=-\'$(expr "X${option}X" : 'X-.[0-9]*\(.*\)' | sed "$escape")
  67.     eval "set -- $arg2 "'${1+"$@"}'
  68.     option=$(expr "X$option" : 'X\(-.[0-9]*\)');;
  69.   (--binary-*=* | --[lm]a*=* | --reg*=*)
  70.     ;;
  71.   (-[ABCDefm] | --binary-* | --file | --[lm]a* | --reg*)
  72.     case ${1?"$option option requires an argument"} in
  73.     (*\'*)
  74.       optarg=" '"$(printf '%sX\n' "$1" | sed "$escape");;
  75.     (*)
  76.       optarg=" '$1'";;
  77.     esac
  78.     shift;;
  79.   (--)
  80.     break;;
  81.   (-?*)
  82.     ;;
  83.   (*)
  84.     case $option in
  85.     (*\'*)
  86.       operands="$operands '"$(printf '%sX\n' "$option" | sed "$escape");;
  87.     (*)
  88.       operands="$operands '$option'";;
  89.     esac
  90.     ${POSIXLY_CORRECT+break}
  91.     continue;;
  92.   esac
  93.  
  94.   case $option in
  95.   (-[drRzZ] | --di* | --exc* | --inc* | --rec* | --nu*)
  96.     printf >&2 '%s: %s: Option not supported\n' "$0" "$option"
  97.     exit 2;;
  98.   (-[ef]* | --file | --file=* | --reg*)
  99.     have_pat=1;;
  100.   (--h | --he | --hel | --help)
  101.     echo "$usage" || exit 2
  102.     exit;;
  103.   (-H | --wi | --wit | --with | --with- | --with-f | --with-fi \
  104.   | --with-fil | --with-file | --with-filen | --with-filena | --with-filenam \
  105.   | --with-filename)
  106.     with_filename=1
  107.     continue;;
  108.   (-l | --files-with-*)
  109.     files_with_matches=1;;
  110.   (-L | --files-witho*)
  111.     files_without_matches=1;;
  112.   (--no-f*)
  113.     no_filename=1;;
  114.   (-V | --v | --ve | --ver | --vers | --versi | --versio | --version)
  115.     echo "$version" || exit 2
  116.     exit;;
  117.   esac
  118.  
  119.   case $option in
  120.   (*\'?*)
  121.     option=\'$(expr "X${option}X" : 'X\(.*\)' | sed "$escape");;
  122.   (*)
  123.     option="'$option'";;
  124.   esac
  125.  
  126.   grep="$grep $option$optarg"
  127. done
  128.  
  129. eval "set -- $operands "'${1+"$@"}'
  130.  
  131. if test $have_pat -eq 0; then
  132.   case ${1?"Missing pattern; try \`${0##*/} --help' for help"} in
  133.   (*\'*)
  134.     grep="$grep -- '"$(printf '%sX\n' "$1" | sed "$escape");;
  135.   (*)
  136.     grep="$grep -- '$1'";;
  137.   esac
  138.   shift
  139. fi
  140.  
  141. if test $# -eq 0; then
  142.   set -- -
  143. fi
  144.  
  145. exec 3>&1
  146. res=0
  147.  
  148. for i; do
  149.   case $i in
  150.     *[-.][zZ] | *_z | *[-.]gz | *.t[ag]z) uncompress="gzip -cdfq";;
  151.     *[-.]bz2 | *[-.]tbz | *.tbz2) uncompress="bzip2 -cdfq";;
  152.     *) uncompress="$xz -cdfq";;
  153.   esac
  154.   # Fail if xz or grep (or sed) fails.
  155.   xz_status=$(
  156.     exec 5>&1
  157.     ($uncompress -- "$i" 5>&-; echo $? >&5) 3>&- |
  158.     if test $files_with_matches -eq 1; then
  159.       eval "$grep" -q && { printf '%s\n' "$i" || exit 2; }
  160.     elif test $files_without_matches -eq 1; then
  161.       eval "$grep" -q || {
  162.         r=$?
  163.         if test $r -eq 1; then
  164.           printf '%s\n' "$i" || r=2
  165.         fi
  166.         exit $r
  167.       }
  168.     elif test $with_filename -eq 0 &&
  169.          { test $# -eq 1 || test $no_filename -eq 1; }; then
  170.       eval "$grep"
  171.     else
  172.       case $i in
  173.       (*'
  174. '* | *'&'* | *'\'* | *'|'*)
  175.         i=$(printf '%s\n' "$i" |
  176.             sed '
  177.               $!N
  178.               $s/[&\|]/\\&/g
  179.               $s/\n/\\n/g
  180.             ');;
  181.       esac
  182.       sed_script="s|^|$i:|"
  183.  
  184.       # Fail if grep or sed fails.
  185.       r=$(
  186.         exec 4>&1
  187.         (eval "$grep" 4>&-; echo $? >&4) 3>&- | sed "$sed_script" >&3 4>&-
  188.       ) || r=2
  189.       exit $r
  190.     fi >&3 5>&-
  191.   )
  192.   r=$?
  193.   test "$xz_status" -eq 0 || test "$xz_status" -eq 2 || r=2
  194.   test $res -lt $r && res=$r
  195. done
  196. exit $res
  197.